package com.example.config;

import com.example.entity.dto.weixiubaoyang.GuZhangTask;
import com.example.service.GuzhanglogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

@Service
@EnableScheduling
public class DynamicScheduledTaskService {

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);  // 使用单线程池来执行任务
    public static Map<String, GuZhangTask> scheduledTasks = new HashMap<>();  // 存储任务的ID和定时任务

    @Autowired
    private GuzhanglogService guzhanglogService;

    // 模拟调用外部接口
    public void callExternalApi(Integer id, String level) {
        // 调用外部接口的代码
        System.out.println("Calling external API with parameter: id = " + id + " , level = " + level);
        guzhanglogService.tongZhiNextPeople(id, level);
    }

    // 调度任务，设置在指定的时间后执行
//    public void scheduleTask(String taskId, long delayMillis, Object parameter) {
//        // 取消之前可能存在的任务
//        cancelScheduledTask(taskId);
//
//        // 创建新的任务，并将其调度
//        ScheduledFuture<?> futureTask = scheduler.schedule(() -> {
//            callExternalApi(parameter);
//            scheduledTasks.remove(taskId);  // 执行完毕后移除任务
//        }, delayMillis, TimeUnit.MILLISECONDS);
//
//        // 保存该任务的Future对象，便于取消
//        scheduledTasks.put(taskId, futureTask);
//    }

    // 取消某个特定任务
//    public void cancelScheduledTask(String taskId) {
//        ScheduledFuture<?> futureTask = scheduledTasks.get(taskId);
//        if (futureTask != null) {
//            futureTask.cancel(false);  // false表示不中断任务执行
//            scheduledTasks.remove(taskId);
//        }
//    }

    // 检查并执行需要运行的任务（例如定期扫描任务，检查是否有需要执行的）
    @Scheduled(fixedRate = 60000)  // 每分钟扫描一次任务
    public void scanScheduledTasks() {
        System.out.println("调用扫描任务.......................");
        // 使用 Iterator 安全地删除 Map 中的条目
        Iterator<Map.Entry<String, GuZhangTask>> iterator = scheduledTasks.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, GuZhangTask> entry = iterator.next();
            //  把时间在现在之前的全部都执行掉
            if(LocalDateTime.now().compareTo(entry.getValue().getTimes()) >= 0) {
                // zuo
                // 删除这个key
//                System.out.println(entry.getValue().getIdid());
                callExternalApi(Integer.parseInt(entry.getValue().getGuzhangdanId()), entry.getValue().getLevel());
                iterator.remove();
            }
        }
    }
}
